package com.merit;

/**
 * @author xingdongyang
 * @date 2020/6/16
 * 序列化是将一个数据结构或者对象转换为连续的比特位的操作，进而可以将转换后的数据存储在一个文件或者内存中，同时也可以通过网络传输到另一个计算机环境，采取相反方式重构得到原数据。
 * 请设计一个算法来实现二叉树的序列化与反序列化。这里不限定你的序列 / 反序列化算法执行逻辑，你只需要保证一个二叉树可以被序列化为一个字符串并且将这个字符串反序列化为原始的树结构。
 */
public class Codec {

    // Encodes a tree to a single string.
    public String serialize(TreeNode root) {
        if (root == null) {
            return null;
        }
        int depth = getBTreeDepth(root);
        StringBuffer stringBuffer = new StringBuffer();
        //
        while (root.left != null && root.right != null) {
            stringBuffer.append(root.val);
            if (root.left != null) {
                root = root.left;
            }
            stringBuffer.append(root.left.val);
        }
        return "";
    }

    public int getBTreeDepth(TreeNode pRoot) {
        if (pRoot == null){
            return 0;
        }
        int lDepth = getBTreeDepth(pRoot.left);
        int rDepth = getBTreeDepth(pRoot.right);
        return ((Math.max(lDepth, rDepth)) + 1);
    }

    // Decodes your encoded data to tree.
    public TreeNode deserialize(String data) {
        return null;
    }

    public class TreeNode {
        int val;
        TreeNode left;
        TreeNode right;

        TreeNode(int x) {
            val = x;
        }
    }
}
